package com.station.param.request.purchase;

/**
 * @BelongsProject: newblderp
 * @BelongsPackage: com.station.param.request.purchase
 * @Author: songhui
 * @CreateTime: 2025-10-20  16:34
 * @Description: 采购订单
 * @Version: 1.0
 */

import lombok.Data;

import java.util.Date;

@Data
public class PurchaseOrderRequest {
    private boolean IsAutoSubmitAndAudit;
    private Model[] Model;

    @Data
    public static class Model {
        private Long FID;
        private FBillTypeID FBillTypeID;
        private String FBusinessType;
        private String FBillNo;
        private Date FDate;
        private FSupplierId FSupplierId;
        private FPurchaseOrgId FPurchaseOrgId;
        private FPurchaseDeptId FPurchaseDeptId;
        private FPurchaserGroupId FPurchaserGroupId;
        private FPurchaserId FPurchaserId;
        private FProviderId FProviderId;
        private FProviderContactId FProviderContactId;
        private String FProviderAddress;
        private FSettleId FSettleId;
        private FChargeId FChargeId;
        private FConfirmerId FConfirmerId;
        private String FConfirmDate;
        private FCorrespondOrgId FCorrespondOrgId;
        private String FProviderContact;
        private String FSourceBillNo;
        private String FIsModificationOperator;
        private String FChangeStatus;
        private String FACCTYPE;
        private String FProviderEMail;
        private String FCloseReason;
        private String FIsMobBill;
        private FPOOrderEntry[] FPOOrderEntry;
        private FIinstallment[] FIinstallment;
    }

    @Data
    public static class FBillTypeID {
        private String FNUMBER;
        public FBillTypeID(String FNUMBER){
            this.FNUMBER= FNUMBER;
        }
    }

    @Data
    public static class FSupplierId {
        private String FNumber;
        public FSupplierId(String FNumber){
            this.FNumber = FNumber;
        }
    }

    @Data
    public static class FPurchaseOrgId {
        private String FNumber;
        public FPurchaseOrgId(String FNumber){
            this.FNumber = FNumber;
        }
    }

    @Data
    public static class FPurchaseDeptId {
        private String FNumber;
    }

    @Data
    public static class FPurchaserGroupId {
        private String FNumber;
    }

    @Data
    public static class FPurchaserId {
        private String FNumber;
    }

    @Data
    public static class FProviderId {
        private String FNumber;
    }

    @Data
    public static class FProviderContactId {
        private String FCONTACTNUMBER;
    }

    @Data
    public static class FSettleId {
        private String FNumber;
    }

    @Data
    public static class FChargeId {
        private String FNumber;
    }

    @Data
    public static class FConfirmerId {
        private String FUserID;
    }

    @Data
    public static class FCorrespondOrgId {
        private String FNumber;
    }

    @Data
    public static class FPOOrderFinance {
        private Long FEntryId;
        private FSettleModeId FSettleModeId;
        private FPayConditionId FPayConditionId;
        private FSettleCurrId FSettleCurrId;
        private FExchangeTypeId FExchangeTypeId;
        private Double FExchangeRate;
        private FPriceListId FPriceListId;
        private FDiscountListId FDiscountListId;
        private String FPriceTimePoint;
        private FFOCUSSETTLEORGID FFOCUSSETTLEORGID;
        private String FIsIncludedTax;
        private String FISPRICEEXCLUDETAX;
        private FLocalCurrId FLocalCurrId;
        private Object FPayAdvanceBillId;
        private Double FPAYADVANCEAMOUNT;
        private Double FSupToOderExchangeBusRate;
        private String FSEPSETTLE;
        private Double FDepositRatio;
        private Double FAllDisCount;
        private Double FUPPERBELIEL;
    }

    @Data
    public static class FSettleModeId {
        private String FNumber;
    }

    @Data
    public static class FPayConditionId {
        private String FNumber;
    }

    @Data
    public static class FSettleCurrId {
        private String FNumber;
    }

    @Data
    public static class FExchangeTypeId {
        private String FNumber;
    }

    @Data
    public static class FPriceListId {
        private String FNumber;
    }

    @Data
    public static class FDiscountListId {
        private String FNumber;
    }

    @Data
    public static class FFOCUSSETTLEORGID {
        private String FNumber;
    }

    @Data
    public static class FLocalCurrId {
        private String FNumber;
    }

    @Data
    public static class FPOOrderPay {
        private Long FEntryId;
    }

    @Data
    public static class FPOOrderClause {
        private Long FEntryID;
        private FClauseId FClauseId;
        private String FClauseDesc;
    }

    @Data
    public static class FClauseId {
        private String FNumber;
    }

    @Data
    public static class FPOOrderEntry {
        private Long FEntryID;
        private String FProductType;
        private FMaterialId FMaterialId;
        private FBomId FBomId;
        private String FMaterialDesc;
        private Object FAuxPropId;
        private FUnitId FUnitId;
        private Double FQty;
        private FPriceUnitId FPriceUnitId;
        private Double FPriceUnitQty;
        private Double FPriceBaseQty;
        private String FDeliveryDate;
        private String FLocation;
        private String FLocationAddress;
        private Double FPrice;
        private Double FTaxPrice;
        private Double FEntryDiscountRate;
        private FTaxCombination FTaxCombination;
        private Double FEntryTaxRate;
        private FRequireOrgId FRequireOrgId;
        private FRequireDeptId FRequireDeptId;
        private Object FRequireStaffId;
        private FReceiveOrgId FReceiveOrgId;
        private FBranchId FBranchId;
        private FReceiveDeptId FReceiveDeptId;
        private FEntrySettleOrgId FEntrySettleOrgId;
        private String FGiveAway;
        private String FEntryNote;
        private String FSupMatId;
        private String FSupMatName;
        private FStockUnitID FStockUnitID;
        private Double FStockQty;
        private Double FStockBaseQty;
        private FLot FLot;
        private String FSupplierLot;
        private FProcesser FProcesser;
        private String FDeliveryControl;
        private String FTimeControl;
        private Double FDeliveryMaxQty;
        private Double FDeliveryMinQty;
        private Double FDeliveryBeforeDays;
        private Double FDeliveryDelayDays;
        private String FDeliveryEarlyDate;
        private String FDeliveryLastDate;
        private Double FPriceCoefficient;
        private FEntrySettleModeId FEntrySettleModeId;
        private Double FConsumeSumQty;
        private String FSrcBillTypeId;
        private String FSrcBillNo;
        private String FContractNo;
        private String FReqTraceNo;
        private String FMtoNo;
        private String FDEMANDTYPE;
        private String FDEMANDBILLNO;
        private Long FDEMANDBILLENTRYSEQ;
        private Long FDEMANDBILLENTRYID;
        private FLocationId FLocationId;
        private String FPlanConfirm;
        private FSalUnitID FSalUnitID;
        private Double FSalQty;
        private Double FSalJoinQty;
        private Double FBaseSalJoinQty;
        private FSetPriceUnitID FSetPriceUnitID;
        private Double FInventoryQty;
        private FChargeProjectID FChargeProjectID;
        private FCentSettleOrgId FCentSettleOrgId;
        private FDispSettleOrgId FDispSettleOrgId;
        private Long FGroup;
        private FDeliveryStockStatus FDeliveryStockStatus;
        private Double FMaxPrice;
        private Double FMinPrice;
        private String FIsStock;
        private Double FBaseConsumeSumQty;
        private Double FSalBaseQty;
        private FSubOrgId FSubOrgId;
        private FEntryPayOrgId FEntryPayOrgId;
        private Double FPriceDiscount;
        private Double FAllAmountExceptDisCount;
        private String FSUBREQBILLNO;
        private Long FSUBREQBILLSEQ;
        private Long FSUBREQENTRYID;
    }

    @Data
    public static class FMaterialId {
        private String FNumber;
        public FMaterialId(String FNumber){
            this.FNumber = FNumber;
        }
    }

    @Data
    public static class FBomId {
        private String FNumber;
    }

    @Data
    public static class FUnitId {
        private String FNumber;
        public FUnitId(String FNumber){
            this.FNumber=FNumber;
        }
    }

    @Data
    public static class FPriceUnitId {
        private String FNumber;
        public FPriceUnitId(String FNumber){
            this.FNumber =FNumber;
        }
    }

    @Data
    public static class FTaxCombination {
        private String FNumber;
    }

    @Data
    public static class FRequireOrgId {
        private String FNumber;
    }

    @Data
    public static class FRequireDeptId {
        private String FNumber;
    }

    @Data
    public static class FReceiveOrgId {
        private String FNumber;
    }

    @Data
    public static class FBranchId {
        private String FNUMBER;
    }

    @Data
    public static class FReceiveDeptId {
        private String FNUMBER;
    }

    @Data
    public static class FEntrySettleOrgId {
        private String FNumber;
        public FEntrySettleOrgId(String FNumber){
            this.FNumber= FNumber;
        }
    }

    @Data
    public static class FStockUnitID {
        private String FNumber;
        public FStockUnitID(String FNumber){
            this.FNumber =FNumber;
        }
    }

    @Data
    public static class FLot {
        private String FNumber;
    }

    @Data
    public static class FProcesser {
        private String FNumber;
    }

    @Data
    public static class FEntrySettleModeId {
        private String FNumber;
    }

    @Data
    public static class FLocationId {
        private String FNumber;
    }

    @Data
    public static class FSalUnitID {
        private String FNumber;
    }

    @Data
    public static class FSetPriceUnitID {
        private String FNumber;
    }

    @Data
    public static class FChargeProjectID {
        private String FNumber;
    }

    @Data
    public static class FCentSettleOrgId {
        private String FNumber;
    }

    @Data
    public static class FDispSettleOrgId {
        private String FNumber;
    }

    @Data
    public static class FDeliveryStockStatus {
        private String FNumber;
    }

    @Data
    public static class FSubOrgId {
        private String FNumber;
    }

    @Data
    public static class FEntryPayOrgId {
        private String FNumber;
    }

    @Data
    public static class FEntryDeliveryPlan {
        private Long FDetailId;
        private String FDeliveryDate_Plan;
        private Double FPlanQty;
        private String FELocation;
        private String FELocationAddress;
        private String FSUPPLIERDELIVERYDATE;
        private String FPREARRIVALDATE;
        private Double FTRLT;
        private Double FConfirmDeliQty;
        private String FConfirmDeliDate;
        private String FConfirmInfo;
        private FELocationId FELocationId;
    }

    @Data
    public static class FELocationId {
        private String FNumber;
    }

    @Data
    public static class FTaxDetailSubEntity {
        private Long FDetailID;
        private FTaxRateId FTaxRateId;
        private Double FTaxRate;
    }

    @Data
    public static class FTaxRateId {
        private String FNumber;
    }


    @Data
    public static class FPayMaterialId {
        private String FNUMBER;
    }

    @Data
    public static class FPAYPLANPRICEUNITID {
        private String FNumber;
    }

    @Data
    public static class FBasePriceUnit {
        private String FNumber;
    }

    @Data
    public static class FPayChargeProjectID {
        private String FNUMBER;
    }

    @Data
    public static class FOrderActualPaySubEntity {
        private Long FDetailID;
    }

    @Data
    public static class FPaymentEntry {
        private Long FEntryID;
    }

    @Data
    public static class FIinstallment {
        private Double FYFRATIO;
        private Double FYFAMOUNT;
        private Boolean FISPREPAYMENT;
        private Double FInsPrepaidAmount;
        private Integer FMATERIALSEQ;
        private Double FPayPlanQty;
        private Double FPayPlanPrice;
        private Long FOrderEntryId;
        private Double FinsPayAdvanceRate;
        private Double FInsPayAdvanceAmount;
        private Double FBasePayPlanQty;
    }

    @Data
    public static  class FSearchPurchase{
        private Integer createOrgId;
        private String number;
        private String id;
        private boolean isSortBySeq;
    }
}






